package main

import "fmt"

/*
Go语言的接口(interface)是一种类型，定义了一组方法的集合，
但是接口又不需要去实现他们，这些方法可以被不同的类型实现，进而就是这个类型实现了这个接口。

在Go语言中，接口是一个重要的概念，接口被广泛应用于许多标准库和框架中。
通过接口，可以使不同的类型之间实现相同的行为，
从而达到代码复用和扩展的目的，并且可以实现不同类型之间的无缝切换*/

// 定义一个接口,用来表示动物的行为
type Animal interface {
	Speak()
}

//定义一个结构体Dog，并实现Animal接口中的方法

type Dog struct {
	Name string
	Age  int
}

func (d Dog) Speak() {
	println("汪汪汪")
}

// 定义一个结构体Cat，并实现Animal接口中的方法
type Cat struct {
	Name string
	Age  int
}

func (c Cat) Speak() {
	c.Name = "小花猫"
	println(c.Name, "喵喵喵")
}

// mysql  gorm
// 1.创建一个数据库的结构体，用来存放数据库的连接信息
type DBconfig struct {
	User string
	Pass string
	Host string
	Port string
	DB   string
}

func main() {
	//创建一个Dog类型的变量
	var a Animal = Dog{}
	a.Speak()
	//创建一个Cat类型的变量
	var b Animal = Cat{}
	b.Speak()

	//2.声明一个数据库实例
	var db DBconfig
	db.User = "root"
	db.Pass = "123456"
	db.Host = "localhost"
	db.Port = "3306"
	db.DB = "test"
	//3.插入一条数据
	fmt.Println("在mysql中插入一条数据：db.row('insert xxx into xxx').Rows()")

	//4.换成pg
	//4.1 生成pg数据库的连接实例
	dbPG := DBconfig{
		User: "root",
		Pass: "sasa",
		Host: "127.0.0.1",
		Port: "3306",
		DB:   "test",
	}
	fmt.Println(dbPG)
	//4.2在pg中插入一条数据
	fmt.Println("在pg中插入一条数据：db.QueryRow('insert xxx to user')")
}
